#!/usr/bin/env python

from sys import argv
from glob import glob
from subprocess import Popen, PIPE

if len(argv) < 2:
    print 'Modo de usar: %s <programa_a_testar>' % argv[0]
    raise SystemExit

if len(argv) > 2:
    lista = argv[2:]
else:
    lista = glob('input*')

erros = 0
for nome_in in lista:
    nome_out = 'output' + nome_in[5:]
    nome_prog = './'+argv[1]
    test_out = Popen(nome_prog, stdin=file(nome_in), stdout=PIPE).communicate()[0]
    out = file(nome_out).read()
    if out != test_out:
        out = out.split('\n')
        test_out = test_out.split('\n')
        for i,lin in enumerate(out):
            if i == len(test_out):
                erros +1
                print '... test_out acabou antes de', nome_out
                break
            if test_out[i] != lin:
                msg = '[%s:%s]' % (nome_out, i+1)
                print msg, lin.strip()
                print ' '*(len(msg)-3)+'>>>', test_out[i].strip()
                erros += 1
                
if erros:
    print '****** erros:', erros
else:
    print 'OK'
